package org.bit.practice02;

/**
 *  DCL  Double Check Lock
 *  双重检查锁
 */

public class SingletonDCL {

    // 1.定义一个全局变量
    private static volatile SingletonDCL instance = null;

    // 2.构造方法私有化
    private SingletonDCL() {}

    // 3.对外提供一个获取对象的方法
    public static SingletonDCL getInstance() {
        // 判断一个对象是否已经创建过   判断第一次是否需要加锁
        if (instance == null) {
            // 获取锁
            synchronized (SingletonDCL.class) {
                if (instance == null) {
                    // 创建对象
                    instance = new SingletonDCL();
                }
            }
        }
        return instance;
    }
}
